/*
 * Producto.java
 *
 * Created on 16 de octubre de 2006, 09:12 AM
 */

package inc.jmc.cyberboard.ui.ventas;

/**
 *
 * @author  JOlguin01
 */
import inc.jmc.cyberboard.common.DefaultLookAndFeel;
import inc.jmc.cyberboard.entitybeans.Productos;
import inc.jmc.cyberboard.log.Log;
import java.awt.Color;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.table.DefaultTableModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.*;

import inc.jmc.cyberboard.persistence.*;
import inc.jmc.cyberboard.ui.CyberManager;
import inc.jmc.cyberboard.dao.*;
import inc.jmc.cyberboard.common.StringExceptions;
import java.util.Vector;
import java.util.ArrayList;
import java.util.Iterator;
import inc.jmc.cyberboard.common.ImageLoader;
import inc.jmc.cyberboard.entitybeans.IconoProducto;
import java.util.HashMap;
import org.apache.log4j.Logger;

public class ProductoFrm extends javax.swing.JInternalFrame{
    static Logger logger = Logger.getLogger(ProductoFrm.class.getName());
    Object[] header=new Object[]{"Nombre","Precio","Descripcion","Stock"};
    
    private CyberManager cyberM;
    DefaultTableModel dtm=new DefaultTableModel();
    
    /**
     * Es una lista de vectores que componen todo el contenido de la tabla JTable cada vez que se hace una adicion o un borrado del grid<BR>
     * Esta lista se necesita cuando se hace el refresh del JTable (creando un nuevo jtable y luego poniendolo en un viewport de scroll).
     */
    ArrayList dataProducts=new ArrayList();
    /**
     * Esta lista unifica tanto a los iconos reservados como a los del usuario, y en conjunto, se usan para ponerlos en el combobox, cuando 
     * hacemos una operacion de agregar, o de modificar.
     */
    ArrayList iconosComboAux=new ArrayList();
            
    
    
    
    /**
     * Este metodo se hizo para que se regrescara la ventana de Productos, (la ventan principal donde se da de alta a todos los productos)
     * y de esa manera se pudiera reutilizar cuando se diera clic en el menu item que hace que aparezca la ventana de productos.
     * De manera que cuando se haga clic en la ventana de productos, se recargue siempre la lista de productos desde la BD 
     */
    public void initproductoFrm()
    {
    	this.jTabbedPane1.setTitleAt(1,"Descripcion");
        this.jTabbedPane1.setTitleAt(0,"Lista de Productos");
        modificarPane.setBounds(10, 200, 240, 70);
        enableTxts(false);
        this.setTitle("Productos");
        
        modificarPane.setBounds(10, 200, 240, 70);
        agregarPane.setVisible(false);
        modificarPane.setVisible(false);
        cambiarIconoCmb.setVisible(false);
        statusBarLabel.setText("");
        this.setFrameIcon(ImageLoader.images[ImageLoader.ICON_FRAME_MAIN]);
        this.setIconifiable(false);
        //this.setSize(469,378);
        this.setResizable(true);
        this.setMaximizable(false);
        this.setClosable(true);
        this.campoOrdenarCmb.setSelectedIndex(0);
        //creamos una nueva tabla Leyendo todos los datos que previamente estaban en la bd
        try{
            loadProductsBD();
        }
        catch(Exception ex)
        {
            dtm=new DefaultTableModel(new Object[][]{},
                header);
            this.setTableModelUpdateUI(dtm);
        }
        //aqui damos de alta el listener para las selecciones de renglones en la tabla de productos
        //una vez que ya se haya llenado la tabla con sus datos.
        initSelectionEvent();
        //inicializamos todos los iconos del combo de iconos reservados
        initCambiarIconoCmb();
        if(productosTable.getTableHeader()!=null)
          productosTable.getTableHeader().setReorderingAllowed(false);
        ///en caso de que haya al menos un elemento en el grid, ese lo seleccionamos 
        if(dtm.getRowCount()>0)
            this.productosTable.getSelectionModel().setSelectionInterval(0,0);
        this.updateUI();
    	
    }
    
    /** Creates new form Producto */
    
    public ProductoFrm() {
        initComponents();
        initproductoFrm();
        this.setSize(501,378);
        this.updateUI();
        
    }
    public void initCambiarIconoCmb()
    {
        iconosComboAux=new ArrayList();
        this.cambiarIconoCmb.removeAllItems();
        //aqui recorremos los iconos que ya se cargaron previamente en la clase IconoProducto
        ArrayList arry1=IconoProducto.getListaIcons();
        for(int i=0;i<arry1.size();++i)
        {
            IconoProducto icobj=(IconoProducto)arry1.get(i);
            iconosComboAux.add(icobj);
            this.cambiarIconoCmb.addItem(icobj.getImage());
            
        }
        try{
           IconoProductoDao.refreshIconosUsuario();
        }
        catch(Exception ex)
        {
            logger.info("Excepcion en Productofrm");
            ex.printStackTrace();
        
        }
        ArrayList aux1arry=IconoProductoDao.getListIconosUsuario();
        for(int i=0;i<aux1arry.size();++i)
        {
            IconoProducto icobj=(IconoProducto)aux1arry.get(i);
            iconosComboAux.add(icobj);
            this.cambiarIconoCmb.addItem(icobj.getImage());
            
        }
        
        iconoLabel.setIcon(null);
        iconoLabel.setText("");
        jPanel3.updateUI();
    }
    
    public void initSelectionEvent()
    {
        logger.info("Voy a agregar el evento de seleccion en la tabla");
        ListSelectionModel selModel= productosTable.getSelectionModel();
        selModel.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                productosTableValueChanged(e);
                
            }
        });
        logger.info("Evento agregado");
        
    }
    //Este metodo fue definido a partir
    JLabel respaldoIconoLabel=new JLabel();
    void productosTableValueChanged(ListSelectionEvent e)
    {
        if (e.getValueIsAdjusting()) return;

        ListSelectionModel lstSelectionModel1 = (ListSelectionModel)e.getSource();
        if (!lstSelectionModel1.isSelectionEmpty()) 
        {
            logger.info("Ya entre al evento de seleccion de la tabla");
            int selectedRow = lstSelectionModel1.getMinSelectionIndex();
            if(agregarPane.isVisible())
              enableMainMenu(true);
            if(modificarPane.isVisible())
              enableMainMenu(true);
            Productos beanprod=(Productos)dataProducts.get(selectedRow);
            this.setProducto(beanprod);
            logger.info("El indice del icono de producto seleccionado es->"+beanprod.getIdIcono().intValue());
            IconoProducto iconobean=null;
            if(beanprod.getIdIcono().intValue()<ImageLoader.INITIAL_ID_ICON_USER)
            {
            	///ICONOS POR DEFAUL
                iconobean=(IconoProducto)IconoProducto.getHashIcons().get(""+beanprod.getIdIcono().intValue());
            }
            else
            {///ICONOS DEL USUARIO
                try{
                    HashMap map=IconoProductoDao.getHashIconosUsuario();
                    iconobean=(IconoProducto)map.get(""+beanprod.getIdIcono().intValue());
                	//iconobean=IconoProductoDao.getIconofromID(beanprod.getIdIcono().intValue());
                }
                catch(Exception sqle)
                {
                    sqle.printStackTrace();
                }
            }
            if(iconobean==null)
            {
            	try {
					iconobean=IconoProductoDao.getIconofromID(beanprod.getIdIcono().intValue());
				} catch (Exception e1) {
					
					e1.printStackTrace();
				}
                
            }
            if(iconobean!=null)
            {
            	iconoLabel.setIcon(iconobean.getImage());
                iconoLabel.setText(iconobean.getDescripcion());
                respaldoIconoLabel.setIcon(iconobean.getImage());
                respaldoIconoLabel.setText(iconobean.getDescripcion());
                logger.info("cambio de icono: respaldoIconoLabel-->"+respaldoIconoLabel.getText()+","+respaldoIconoLabel.getIcon());	
            }
            
            
            
            ///Vamos a dejar sin edicion a los campos del formulario
            //con eso se evita que los datos de otro usuario se toquen cuando se ha 
            //cambiado de funcion(fun. alta,o baja o cambio)
            this.enableTxts(false);
            agregarPane.setVisible(false);
            modificarPane.setVisible(false);
        }

    
    
    }
    
    /**
     * Envia un objeto de tipo producto, a la interfaz grafica. Al formulario, para que 
     * pueda visualizarse el contenido que este tenia en la base de datos.<BR>
     * Establece el nombre, precio y descripcion<BR>
     * Cada vez que se hace un clic en un renglon de la tabla, este metodo se invoca para 
     * que establezca el contenido en la ventana de formulario. El bean que se envia, fue, 
     * previamente encontrado en el arreglo de beans que se leyo a su vez de la bd.
     * 
     * @param beanprod es el bean cuyos atributos van a ser desplegados en el formulario
     *
     */
    public void setProducto(Productos beanprod)
    {
        nombreTxt.setText(beanprod.getNombreCorto());
        precioTxt.setText(""+beanprod.getPrecio());
        descripcionTxt.setText(beanprod.getDescripcion());
        nombreTxt.setCaretPosition(0);
        stockTxt.setText(""+beanprod.getStock());
        descripcionTxt.setCaretPosition(0);
    }
    
    /**
     * Con este metodo se garantiza que cualquier modificacion en los datos almacenados en el 
     * default table model, de la tabla, sean actualizados correctamente en el componente visual.<BR>
     * Si se agrega un elemento, si se borra, o se modifica sus atributos (o campos), esta tabla se tiene que actualizar.<BR>
     * Basicamente este metodo crea una nueva tabla, pone las cabeceras, y llena nuevamente los datos en el grid, sobre el viewport de la barra de scroll correspondiente
     * @param dtm Es el default table model que se ha acutalizado, y a partir del cual vamos a construir la nueva tabla visual que se debe ver en el grid.
     */
    public void setTableModelUpdateUI(DefaultTableModel dtm )
    {
        productosTable=new JTable(dtm);
        productosTable.setDragEnabled(true);
        productosTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        productosTable.setFont(DefaultLookAndFeel.TableFont);
        productosTable.setBackground(DefaultLookAndFeel.TableBackground);
        productosTable.setRowHeight(DefaultLookAndFeel.TableRowHeight);
        jScrollPane2.setViewportView(productosTable);
        
        //quitamos el atributo de edicion a la tabla
        JTextField aux1=new javax.swing.JTextField();
        aux1.setEditable(false);
        javax.swing.DefaultCellEditor aux2=new javax.swing.DefaultCellEditor(aux1);
        for(int i=0;i<this.header.length;++i)
        {
            productosTable.getColumnModel().getColumn(i).setCellEditor(aux2);
        }
        if(productosTable.getTableHeader()!=null)
          productosTable.getTableHeader().setReorderingAllowed(false);
    }

    /**
     * Este metodo es invocado desde el metodo init de de este frame.<BR>
     * Carga todos los datos que se encuentran en la base de datos y los despleiga en el grid.<BR>
     * Tambien actualiza los botones de agregar y modificar.
     * @throws java.lang.Exception Lanza una excepcion de base de datos cuando se hace la consulta correspondiente.
     */
    public void loadProductsBD()throws Exception
    {
                ProductosDao recsDao=new ProductosDao();
                java.sql.Connection conn=Dao.getConnection();
                java.util.ArrayList arry=recsDao.getAllProductos(conn);
                conn.close();
                dtm=new DefaultTableModel(new Object[][]{},
                header);
                for(int i=0;i<arry.size();++i)
                {
                    Productos record=(Productos)arry.get(i);
                    Vector recVector=new Vector();
                    recVector.add(record.getNombreCorto());
                    recVector.add(record.getPrecio());
                    recVector.add(record.getDescripcion());
                    recVector.add(record.getStock());
                    dtm.addRow(recVector);
                    
                    
                }
                dataProducts=arry;
                this.setTableModelUpdateUI(dtm);
                agregarPane.setVisible(false);
                modificarPane.setVisible(false);
                statusBarLabel.setText("Hay "+dtm.getRowCount()+" registros");
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel2 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        campoOrdenarCmb = new javax.swing.JComboBox();
        jLabel4 = new javax.swing.JLabel();
        ascendenteCmb = new javax.swing.JComboBox();
        actualizaButton1 = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        productosTable = new javax.swing.JTable();
        jPanel5 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        nombreTxt = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        precioTxt = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jPanel3 = new javax.swing.JPanel();
        iconoLabel = new javax.swing.JLabel();
        agregarPane = new javax.swing.JPanel();
        agregarButton = new javax.swing.JButton();
        cancelarAgregarButton = new javax.swing.JButton();
        modificarPane = new javax.swing.JPanel();
        guardarModificarButton = new javax.swing.JButton();
        cancelarModificarButton = new javax.swing.JButton();
        descripcionTxt = new javax.swing.JTextField();
        cambiarIconoCmb = new javax.swing.JComboBox();
        jLabel6 = new javax.swing.JLabel();
        stockTxt = new javax.swing.JTextField();
        statusBar = new javax.swing.JPanel();
        statusBarLabel = new javax.swing.JLabel();
        mainMenuBar = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        nuevoMenuItem = new javax.swing.JMenuItem();
        modificarMenuItem = new javax.swing.JMenuItem();
        borrarMenuItem = new javax.swing.JMenuItem();
        exportarMenuItem = new javax.swing.JMenuItem();
        refreshMenu = new javax.swing.JMenu();
        actualizaItem1 = new javax.swing.JMenuItem();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(true);
        setTitle("Productos");
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameClosing(evt);
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
            }
        });

        jPanel2.setLayout(new java.awt.BorderLayout());

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel4.setLayout(null);

        jPanel4.setPreferredSize(new java.awt.Dimension(100, 25));
        jLabel5.setText("Campo a ordenar");
        jPanel4.add(jLabel5);
        jLabel5.setBounds(0, 0, 100, 20);

        campoOrdenarCmb.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Nombre", "Precio", "Descripcion", "Stock" }));
        campoOrdenarCmb.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                campoOrdenarCmbItemStateChanged(evt);
            }
        });

        jPanel4.add(campoOrdenarCmb);
        campoOrdenarCmb.setBounds(110, 0, 100, 22);

        jLabel4.setText("Orden");
        jPanel4.add(jLabel4);
        jLabel4.setBounds(230, 0, 40, 20);

        ascendenteCmb.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Ascendente", "Descendente" }));
        ascendenteCmb.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                ascendenteCmbItemStateChanged(evt);
            }
        });

        jPanel4.add(ascendenteCmb);
        ascendenteCmb.setBounds(280, 0, 90, 22);

        actualizaButton1.setText("Actualiza");
        actualizaButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actualizaButton1ActionPerformed(evt);
            }
        });

        jPanel4.add(actualizaButton1);
        actualizaButton1.setBounds(380, 0, 90, 23);

        jPanel2.add(jPanel4, java.awt.BorderLayout.NORTH);

        productosTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane2.setViewportView(productosTable);

        jPanel2.add(jScrollPane2, java.awt.BorderLayout.CENTER);

        jPanel5.setLayout(new java.awt.BorderLayout());

        jPanel5.setPreferredSize(new java.awt.Dimension(100, 15));
        jPanel2.add(jPanel5, java.awt.BorderLayout.SOUTH);

        jTabbedPane1.addTab("tab2", jPanel2);

        jPanel1.setLayout(null);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jLabel1.setText("*Producto");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(10, 40, 70, 20);

        nombreTxt.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        jPanel1.add(nombreTxt);
        nombreTxt.setBounds(90, 40, 140, 20);

        jLabel2.setText("*Precio");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(10, 70, 70, 20);

        precioTxt.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        jPanel1.add(precioTxt);
        precioTxt.setBounds(90, 70, 140, 20);

        jLabel3.setText("Descripcion");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(10, 100, 70, 20);

        jPanel3.setLayout(new java.awt.BorderLayout());

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Icono"));
        iconoLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        iconoLabel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        iconoLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
        jPanel3.add(iconoLabel, java.awt.BorderLayout.CENTER);

        jPanel1.add(jPanel3);
        jPanel3.setBounds(240, 10, 190, 150);

        agregarPane.setLayout(null);

        agregarPane.setBorder(javax.swing.BorderFactory.createTitledBorder("Agregar Nuevo"));
        agregarButton.setMnemonic('A');
        agregarButton.setText("Agregar");
        agregarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                agregarButtonActionPerformed(evt);
            }
        });

        agregarPane.add(agregarButton);
        agregarButton.setBounds(10, 30, 100, 23);

        cancelarAgregarButton.setText("Cancelar");
        cancelarAgregarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelarAgregarButtonActionPerformed(evt);
            }
        });

        agregarPane.add(cancelarAgregarButton);
        cancelarAgregarButton.setBounds(120, 30, 100, 23);

        jPanel1.add(agregarPane);
        agregarPane.setBounds(10, 200, 240, 70);

        modificarPane.setLayout(null);

        modificarPane.setBorder(javax.swing.BorderFactory.createTitledBorder("Modificar"));
        guardarModificarButton.setMnemonic('g');
        guardarModificarButton.setText("Guardar");
        guardarModificarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardarModificarButtonActionPerformed(evt);
            }
        });

        modificarPane.add(guardarModificarButton);
        guardarModificarButton.setBounds(10, 30, 100, 23);

        cancelarModificarButton.setText("Cancelar");
        cancelarModificarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelarModificarButtonActionPerformed(evt);
            }
        });

        modificarPane.add(cancelarModificarButton);
        cancelarModificarButton.setBounds(120, 30, 100, 23);

        jPanel1.add(modificarPane);
        modificarPane.setBounds(10, 280, 240, 70);

        descripcionTxt.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        jPanel1.add(descripcionTxt);
        descripcionTxt.setBounds(90, 100, 140, 20);

        cambiarIconoCmb.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cambiarIconoCmbItemStateChanged(evt);
            }
        });

        jPanel1.add(cambiarIconoCmb);
        cambiarIconoCmb.setBounds(250, 160, 170, 20);

        jLabel6.setText("Existencia");
        jPanel1.add(jLabel6);
        jLabel6.setBounds(10, 130, 80, 20);

        stockTxt.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        jPanel1.add(stockTxt);
        stockTxt.setBounds(90, 130, 140, 20);

        jTabbedPane1.addTab("tab1", jPanel1);

        getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        statusBar.setLayout(new java.awt.BorderLayout());

        statusBar.setPreferredSize(new java.awt.Dimension(100, 20));
        statusBar.add(statusBarLabel, java.awt.BorderLayout.CENTER);

        getContentPane().add(statusBar, java.awt.BorderLayout.SOUTH);

        jMenu1.setText("Archivo");
        nuevoMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
        nuevoMenuItem.setFont(new java.awt.Font("Dialog", 0, 11));
        nuevoMenuItem.setText("Nuevo");
        nuevoMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                nuevoMenuItemActionPerformed(evt);
            }
        });

        jMenu1.add(nuevoMenuItem);

        modificarMenuItem.setFont(new java.awt.Font("Dialog", 0, 11));
        modificarMenuItem.setText("Modificar");
        modificarMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                modificarMenuItemActionPerformed(evt);
            }
        });

        jMenu1.add(modificarMenuItem);

        borrarMenuItem.setFont(new java.awt.Font("Dialog", 0, 11));
        borrarMenuItem.setText("Borrar");
        borrarMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarMenuItemActionPerformed(evt);
            }
        });

        jMenu1.add(borrarMenuItem);

        exportarMenuItem.setText("Exportar");
        exportarMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exportarMenuItemActionPerformed(evt);
            }
        });

        jMenu1.add(exportarMenuItem);

        mainMenuBar.add(jMenu1);

        refreshMenu.setText("Actualiza");
        actualizaItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F8, 0));
        actualizaItem1.setText("Actualiza");
        actualizaItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actualizaItem1ActionPerformed(evt);
            }
        });

        refreshMenu.add(actualizaItem1);

        mainMenuBar.add(refreshMenu);

        setJMenuBar(mainMenuBar);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameClosing

        if(!nuevoMenuItem.isEnabled())
        {
            cancelarAgregarButtonActionPerformed(null);
        }
    }//GEN-LAST:event_formInternalFrameClosing

    String currentProductoPath="";
    private void exportarMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportarMenuItemActionPerformed

        JFileChooser jfc=new JFileChooser(currentProductoPath);
        
        jfc.setFileFilter(new CSVFileFilter());
        int a=jfc.showSaveDialog(this);
        if(a==JFileChooser.APPROVE_OPTION)
        {
            //loadMatlib(jfc.getSelectedFile().getPath());
            //Log.log(this.class .getName()+"  Vamos a poner esta imagen: "+jfc.getSelectedFile().getPath() );
            File file=jfc.getSelectedFile();
            
            
            //vamos a guardar en disco la lista de productos en la ruta que nos indicaron
            StringBuffer content1=new StringBuffer();
            //Vector dataVector = dtm.getDataVector();
            content1.append("Nombre,precio,descripcion,Stock\n");
            for (int i=0;i<dataProducts.size(); i++) {
            	Productos row1 = (Productos) dataProducts.get(i);
				content1.append(row1.getNombreCorto());
				content1.append(",");
				content1.append(row1.getPrecio());
				content1.append(",");
				content1.append(row1.getDescripcion());
				content1.append(",");
				content1.append(row1.getStock());
				content1.append("\n");
			}
            currentProductoPath=file.getPath();
            if(!currentProductoPath.toLowerCase().endsWith("csv"))
            {
                currentProductoPath=currentProductoPath+".csv";
            }
            FileWriter fw; 
            try {
            	if(file.exists())
                {
                	int opti = JOptionPane.showConfirmDialog(this, "Desea sobreescribir el archivo?", "Archivo existente", JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
                	if(opti==JOptionPane.NO_OPTION)
                		return;
                	
                	
                }
				fw=new FileWriter(currentProductoPath);
				fw.write(content1.toString());
				fw.close();
				JOptionPane.showMessageDialog(this,"El archivo se exporto exitosamente","Exportar arcivo",JOptionPane.INFORMATION_MESSAGE);
			} catch (IOException e) {
				// TODO Auto-generated catch block
                                JOptionPane.showMessageDialog(this,"Error al exportar archivo:"+e.getMessage(),"Error IO",JOptionPane.ERROR_MESSAGE);
				e.printStackTrace();
			}
            
            
            /*
            //jarsDtm=new DefaultTableModel(new Object[][]{}, InsideJar.jarsHeader);
            DefaultTableModel aux=new DefaultTableModel(new Object[][]{}, InsideJar.jarsHeader);
            Vector rows=jarsDtm.getDataVector();
            for(int i=0;i<jarsDtm.getRowCount();++i)
            {
                aux.addRow((Vector)rows.get(i));
            }
            if(files.length>0)
            {
                currentProductoPath=files[0].getPath();
                //int numeracion=jarsDtm.getRowCount();
                int numeracion=aux.getRowCount();
                for(int i=0;i<files.length;++i)
                {
                    Object[] row=new Object[]{""+(++numeracion),files[i].getPath()};                    
                    //jarsDtm.addRow(row);
                    aux.addRow(row);
                }
            }
            
            //jarsTable=this.setTableModelUpdateUI1(jarsDtm);
            jarsTable=this.setTableModelUpdateUI1(aux);
            jarsDtm=aux;*/
            
        }
        
    }//GEN-LAST:event_exportarMenuItemActionPerformed

    private void actualizaButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actualizaButton1ActionPerformed

        this.initproductoFrm();
    }//GEN-LAST:event_actualizaButton1ActionPerformed
    
    private void actualizaItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actualizaItem1ActionPerformed

        this.initproductoFrm();
    }//GEN-LAST:event_actualizaItem1ActionPerformed

    private void cambiarIconoCmbItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cambiarIconoCmbItemStateChanged

        int ndx=cambiarIconoCmb.getSelectedIndex();
        if(ndx>=0)
        {
            //ArrayList iconosaux=IconoProducto.getListaIcons();
            IconoProducto iconop=(IconoProducto )this.iconosComboAux.get(ndx);
            iconoLabel.setText(iconop.getDescripcion());
            iconoLabel.setIcon(iconop.getImage());
            jPanel3.updateUI();
        }
        
        
    }//GEN-LAST:event_cambiarIconoCmbItemStateChanged

    private void ascendenteCmbItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_ascendenteCmbItemStateChanged

        campoOrdenarCmbItemStateChanged(evt);
        
    }//GEN-LAST:event_ascendenteCmbItemStateChanged

    /**
     * Esta variable se necesita porque el evento entra dos veces a hacer el codigo.
     */
    private static int entradaACombo=0;
    
    private void campoOrdenarCmbItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_campoOrdenarCmbItemStateChanged

        logger.info(""+this.getClass().getName()+" ->entramos a campoOrdenarCmbItemStateChanged");
        if(entradaACombo%2==0){
            ///recuperamos el elemento por el que vamos a ordenar
            int ndx=campoOrdenarCmb.getSelectedIndex();
            inc.jmc.cyberboard.common.TableSortedModel sort=new inc.jmc.cyberboard.common.TableSortedModel(dtm);
            try{
                dtm=sort.sortModel_usingDB(ndx,ascendenteCmb.getSelectedIndex()==0?true:false);
                this.setTableModelUpdateUI(dtm);
                entradaACombo=0;
                statusBarLabel.setText("Hay "+dtm.getRowCount()+" registros");
                
                ///obtenemos los beans completos, haciendo nuevamente la consulta
                dataProducts=sort.getSortedProductosBean(ndx,ascendenteCmb.getSelectedIndex()==0?true:false);
                initSelectionEvent();
                
            }
            catch(Exception ex)
            {
                
                ex.printStackTrace();
            }
        }
        entradaACombo++;
    }//GEN-LAST:event_campoOrdenarCmbItemStateChanged

    private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
        logger.info(this.getClass().getName()+":"+this.getSize().width+","+this.getSize().height+"    ");
    }//GEN-LAST:event_formComponentResized

    private void borrarMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarMenuItemActionPerformed
        //recuperamos el ID del producto que se desea borrar
        ListSelectionModel lstSelectionModel1 = productosTable.getSelectionModel();
        if (!lstSelectionModel1.isSelectionEmpty()) 
        {
            logger.info("Ya entre al evento de seleccion de la tabla");
            int selectedRow = lstSelectionModel1.getMinSelectionIndex();
            Productos auxprod=(Productos)dataProducts.get(selectedRow);
            String nombreCorto = auxprod.getNombreCorto();
            if(nombreCorto.equals("PCTIME10001"))
            {
            	return;
            }
            String[] ops=new String[]{"Si","No"};
            int a=JOptionPane.showOptionDialog(
                this,
                "Desea borrar este producto ?",
                "Borrado de datos",
                JOptionPane.DEFAULT_OPTION,
                JOptionPane.WARNING_MESSAGE,
                null,
                ops,
                ops[0]);
            if(a==JOptionPane.YES_OPTION) {
                ProductosDao accDao=new ProductosDao();
                try{
                    
                    java.sql.Connection conn=Dao.getConnection();
                    Productos prodselected=(Productos)dataProducts.get(selectedRow);
                    accDao.delete(conn,prodselected);
                    logger.info("Ya borramos de la bd");
                    conn.close();

                    dtm.removeRow(selectedRow);
                    dataProducts.remove(selectedRow);
                    int buttom=dtm.getRowCount()-1;
                    productosTable.getSelectionModel().setSelectionInterval(buttom,buttom);
                    JOptionPane.showMessageDialog(this,"Producto borrado ok",
                            "Borrado de producto",
                            JOptionPane.INFORMATION_MESSAGE);
                    /**
                     * Vamos a actualizar la ventana de ventas para que existan los registros bien actualizados
                     * 
                     * 
                     * */
                    VentasFrm ventasFrm = cyberM.getVentasFrm();
                	ventasFrm.refreshDataButtonActionPerformed();
                	
                }
                catch(java.sql.SQLException ex){
                    ex.printStackTrace();
                    ///Desplegamos el mensaje de error en una ventana
                    String msss=ex.getMessage();
                    if(msss.indexOf("Cannot delete or update a parent row")>=0)
                    {
                    	msss="Este registro no puede ser borrado o modificado debido a que esta asociado con algunos registros de ventas";
                    	
                    }
                    else
                    	msss=new StringExceptions(ex).getMsg();
                    JOptionPane.showMessageDialog(this,msss,
                            "Error en operacion de BD",
                            JOptionPane.ERROR_MESSAGE);
                }
                catch(ClassNotFoundException ex){
                    ex.printStackTrace();
                    ///Desplegamos el mensaje de error en una ventana
                    JOptionPane.showMessageDialog(this,ex.getMessage(),
                            "Error en operacion de BD",
                            JOptionPane.ERROR_MESSAGE);
                }
            }
        }
        else
        {
            JOptionPane.showMessageDialog(this,"Selecciona un elemento de la tabla",
                            "Falta elemento a borrar",
                            JOptionPane.ERROR_MESSAGE);
        
        }
    }//GEN-LAST:event_borrarMenuItemActionPerformed

    private void modificarMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_modificarMenuItemActionPerformed
        if(dtm.getRowCount()>0) {
            enableTxts(true);
            this.jTabbedPane1.setSelectedIndex(1);
            agregarPane.setVisible(false);
            modificarPane.setVisible(true);
            cambiarIconoCmb.setVisible(true);
            enableMainMenu(false);
        }
    }//GEN-LAST:event_modificarMenuItemActionPerformed

    private void nuevoMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nuevoMenuItemActionPerformed
        clearTxts();
        enableTxts(true);
        enableMainMenu(false);
        agregarPane.setVisible(true);
        modificarPane.setVisible(false);
        cambiarIconoCmb.setVisible(true);
        nombreTxt.requestFocus();
        jTabbedPane1.setSelectedIndex(1);
        initCambiarIconoCmb();
        
    }//GEN-LAST:event_nuevoMenuItemActionPerformed

   public void enableMainMenu(boolean argument)
   {
        modificarMenuItem.setEnabled(argument);
        borrarMenuItem.setEnabled(argument);
        nuevoMenuItem.setEnabled(argument);
    
   }
    public void clearTxts()
    {
        nombreTxt.setText("");
        precioTxt.setText("");
        descripcionTxt.setText("");
        iconoLabel.setIcon(null);
        stockTxt.setText("");
    }
   public void enableTxts(boolean argument)
   {
        
        nombreTxt.setEnabled(argument);
        precioTxt.setEnabled(argument);
        descripcionTxt.setEnabled(argument);
        stockTxt.setEnabled(argument);
        //iconoLabel.setEnabled(argument);
        if(argument==false){
            nombreTxt.setBackground(DefaultLookAndFeel.NotEnabledTextBackground);
            precioTxt.setBackground(DefaultLookAndFeel.NotEnabledTextBackground);
            descripcionTxt.setBackground(DefaultLookAndFeel.NotEnabledTextBackground);
            stockTxt.setBackground(DefaultLookAndFeel.NotEnabledTextBackground);
        }
        else{
            nombreTxt.setBackground(Color.WHITE);
            precioTxt.setBackground(Color.WHITE);
            descripcionTxt.setBackground(Color.WHITE);
            stockTxt.setBackground(Color.WHITE);
        }
    
   }
    private void cancelarModificarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelarModificarButtonActionPerformed
        //cancelarAgregarButtonActionPerformed(null);
    	enableTxts(false);
        cambiarIconoCmb.setVisible(false);
        //if(dtm.getRowCount()>0)
        //    this.productosTable.getSelectionModel().setSelectionInterval(0,0);
        agregarPane.setVisible(false);
        modificarPane.setVisible(false);
        this.iconoLabel.setIcon(this.respaldoIconoLabel.getIcon());
        this.iconoLabel.setText(this.respaldoIconoLabel.getText());
        this.updateUI();
        enableMainMenu(true);
        //statusBarLabel.setText("");
    }//GEN-LAST:event_cancelarModificarButtonActionPerformed

    private void guardarModificarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardarModificarButtonActionPerformed


        // recuperamos las cadenas de los textfield para poder construir
        // nuestro bean de producto
        
        String nom=nombreTxt.getText().trim();
        Float precio=null;
        try{
            precio=new Float(precioTxt.getText().trim());
        }
        catch(NumberFormatException nfe)
        {
            JOptionPane.showMessageDialog(this,"Dato no Numerico",
                    "Error de tipo de dato",
                    JOptionPane.ERROR_MESSAGE);
            this.clearTxts();
            return;
        }
        String descripcion=descripcionTxt.getText();
        int sele=cambiarIconoCmb.getSelectedIndex();
        IconoProducto icoproAux=(IconoProducto)iconosComboAux.get(sele);
        
        String exist1=this.stockTxt.getText();
        int existencia=0;
        if(exist1!=null)
        {
            try{
                existencia=Integer.parseInt(exist1);
                
            }
            catch(Exception ex)
            {
                String msg="Error en campo numerico";
                statusBarLabel.setText(msg);
                JOptionPane.showMessageDialog(this,msg,
                        "Llenado de campos",
                        JOptionPane.ERROR_MESSAGE);
                this.clearTxts();
                return;
            }
        
        }
        
        Productos recc=new Productos(nom,precio,descripcion,icoproAux.getIdIcono(),new Integer(existencia));
        
        //recuperamos el ID del producto que se desea modificar
        ListSelectionModel lstSelectionModel1 = productosTable.getSelectionModel();
        if (!lstSelectionModel1.isSelectionEmpty()) 
        {
            int selectedRow = lstSelectionModel1.getMinSelectionIndex();
            ProductosDao accDao=new ProductosDao();
            try{

                java.sql.Connection conn=Dao.getConnection();
                Productos prodselected=(Productos)dataProducts.get(selectedRow);
                accDao.update(conn,recc,prodselected);
                logger.info("Ya modificamos en la bd");
                conn.close();

                dtm.removeRow(selectedRow);
                dataProducts.remove(selectedRow);
                
                dtm.addRow(recc.getRow());
                dataProducts.add(recc);
                
                int buttom=dtm.getRowCount()-1;
                productosTable.getSelectionModel().setSelectionInterval(buttom,buttom);
                
                agregarPane.setVisible(false);
                modificarPane.setVisible(false);
                cambiarIconoCmb.setVisible(false);
                enableTxts(false);
                
                enableMainMenu(true);

            }
            catch(java.sql.SQLException ex){
                ex.printStackTrace();
                ///Desplegamos el mensaje de error en una ventana
                JOptionPane.showMessageDialog(this,new StringExceptions(ex).getMsg(),
                        "Error en operacion de BD",
                        JOptionPane.ERROR_MESSAGE);
            }
            catch(ClassNotFoundException ex){
                ex.printStackTrace();
                ///Desplegamos el mensaje de error en una ventana
                JOptionPane.showMessageDialog(this,ex.getMessage(),
                        "Error en operacion de BD",
                        JOptionPane.ERROR_MESSAGE);
            }
            
        }
        
        
        /*String nom=nombreTxt.getText().trim();
        String dir=direccionTxt.getText().trim();
        String tel=telefonoTxt.getText();
        String ema=emailTxt.getText().trim();
        String usu=usuarioTxt.getText().trim();
        String pas=new String(passwordTxt.getPassword()).trim();
        int tip=tipoUsuarioComboBox.getSelectedIndex()+1;
        AccountUser acc=new AccountUser(nom,dir,tel,ema,usu,pas,tip);
        logger.info("Estos son los valores de los campos:\n"+acc);
        statusBarLabel.setText("");
        if(  !acc.isValid() ) {
            String msg="Algun campo obligatorio no se ha llenado";
            statusBarLabel.setText(msg);
            JOptionPane.showMessageDialog(this,msg,
                    "Llenado de campos",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
        //Vamos a analizar el caso cuando el usuario fue modificado
        String usuarioselected=null;
        if( ! acc.isInList(accountsHt) ) {
            usuarioselected=(String)usuariosList.getSelectedValue();
            //borramos el usuario que estaba en el componente Lista
            //para que mas adelante lo agreguemos con el nuevo usuario
            accountsHt.remove(usuarioselected);
            accountsHt.put(acc.getUsuario(),acc);
            dlm.removeElement(usuarioselected);
            dlm.addElement(acc.getUsuario());
        }
        //Si el hashtable no contiene la cuenta (que es donde se indexa por el usuario),
        // entonces se agrega la cuenta al hashtable
        if(  acc.isInList(accountsHt) ) {
            try{
                
                //guardamos en la BASE DE DATOS
                AccountUserDao accDao=new AccountUserDao();
                java.sql.Connection conn=Dao.getConnection();
                //el argumento usuarioselected, lo mandamos para que adentro se analice si fue nulo o no
                //el que sea nulo, significa que el usuario no fue modificado, sino que se
                //hizo modificacion en los campos restantes
                //si usuarioselected es diferente de nulo, quiere decir que el cambio incluye al nombre del usuario
                accDao.update(conn,acc,usuarioselected);
                logger.info("Ya guardamos en la bd");
                conn.close();
                ///desaparecemos el panel de actualizacion
                accountsHt.put(acc.getUsuario(),acc);// agregamos a la cuenta , la llave es el usuario
                agregarPane.setVisible(false);
                modificarPane.setVisible(false);
                enableTxts(false);
                
                enableMainMenu(true);
                
            } catch(java.sql.SQLException ex){
                ex.printStackTrace();
                ///Desplegamos el mensaje de error en una ventana
                JOptionPane.showMessageDialog(this,new StringExceptions(ex).getMsg(),
                        "Error en operacion de BD",
                        JOptionPane.ERROR_MESSAGE);
            } catch(ClassNotFoundException ex){
                ex.printStackTrace();
                ///Desplegamos el mensaje de error en una ventana
                JOptionPane.showMessageDialog(this,ex.getMessage(),
                        "Error en operacion de BD",
                        JOptionPane.ERROR_MESSAGE);
            }
        }*/
    }//GEN-LAST:event_guardarModificarButtonActionPerformed

    private void cancelarAgregarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelarAgregarButtonActionPerformed
        enableTxts(false);
        cambiarIconoCmb.setVisible(false);
        //if(dtm.getRowCount()>0)
        //    this.productosTable.getSelectionModel().setSelectionInterval(0,0);
        agregarPane.setVisible(false);
        modificarPane.setVisible(false);
        this.iconoLabel.setIcon(this.respaldoIconoLabel.getIcon());
        this.iconoLabel.setText(this.respaldoIconoLabel.getText());
        this.updateUI();
        enableMainMenu(true);
        //statusBarLabel.setText("");
        if(dtm.getRowCount()>0)
            this.productosTable.getSelectionModel().setSelectionInterval(0,0);
        
    }//GEN-LAST:event_cancelarAgregarButtonActionPerformed

    private void agregarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_agregarButtonActionPerformed
// recuperamos las cadenas de los textfield para poder construir
        // nuestro bean de cuenta
        String nom=nombreTxt.getText().trim();
        Float precio=null;
        try{
            precio=new Float(precioTxt.getText().trim());
        }
        catch(NumberFormatException nfe)
        {
            JOptionPane.showMessageDialog(this,"Dato no Numerico",
                    "Error de tipo de dato",
                    JOptionPane.ERROR_MESSAGE);
            this.clearTxts();
            return;
        }
        String descripcion=descripcionTxt.getText();
        int sele=cambiarIconoCmb.getSelectedIndex();
        IconoProducto icoproAux=(IconoProducto)iconosComboAux.get(sele);
        String exist1=this.stockTxt.getText();
        int existencia=0;
        if(exist1!=null)
        {
            try{
                existencia=Integer.parseInt(exist1);
                
            }
            catch(Exception ex)
            {
                String msg="Error en campo numerico";
                statusBarLabel.setText(msg);
                JOptionPane.showMessageDialog(this,msg,
                        "Llenado de campos",
                        JOptionPane.ERROR_MESSAGE);
                this.clearTxts();
                return;
            }
        
        }
        Productos recc=new Productos(nom,precio,descripcion,icoproAux.getIdIcono(),new Integer(existencia));
        logger.info("Estos son los valores de los campos:\n"+recc);
        statusBarLabel.setText("");
        if(  !recc.isValid() ) {
            String msg="Algun campo obligatorio no se ha llenado";
            statusBarLabel.setText(msg);
            JOptionPane.showMessageDialog(this,msg,
                    "Llenado de campos",
                    JOptionPane.ERROR_MESSAGE);
            this.clearTxts();
            return;
        }
        try{

            ///ALTAS
            //guardamos en la BASE DE DATOS
            ProductosDao accDao=new ProductosDao();
            java.sql.Connection conn=Dao.getConnection();
            accDao.add(conn,recc);
            logger.info("Ya guardamos en la bd");
            conn.close();
            dtm.addRow(recc.getRow());//agregamos el item en la lista visual
            ///agregamos en el arreglo de datos
            dataProducts.add(recc);// agregamos el item 
            //colocamos a la lista en el ultimo item agregado
            productosTable.getSelectionModel().setSelectionInterval(dtm.getRowCount()-1,dtm.getRowCount()-1);
            agregarPane.setVisible(false);
            modificarPane.setVisible(false);
            cambiarIconoCmb.setVisible(false);
            JOptionPane.showMessageDialog(this,"Producto registrado ok",
                    "Nuevo Registro",
                    JOptionPane.INFORMATION_MESSAGE);
            enableTxts(false);
            

        } catch(java.sql.SQLException ex){
            ex.printStackTrace();
            ///Desplegamos el mensaje de error en una ventana
            JOptionPane.showMessageDialog(this,new StringExceptions(ex).getMsg(),
                    "Error en operacion de BD",
                    JOptionPane.ERROR_MESSAGE);
        } catch(ClassNotFoundException ex){
            ex.printStackTrace();
            ///Desplegamos el mensaje de error en una ventana
            JOptionPane.showMessageDialog(this,ex.getMessage(),
                    "Error en operacion de BD",
                    JOptionPane.ERROR_MESSAGE);
        }
        
        enableMainMenu(true);
        statusBarLabel.setText("");
    }//GEN-LAST:event_agregarButtonActionPerformed
    
    public void setCyberManager(CyberManager cyberM)
    {
        this.cyberM=cyberM;
    }
    public CyberManager getCyberManager()
    {
        return cyberM;
    
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ProductoFrm().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton actualizaButton1;
    private javax.swing.JMenuItem actualizaItem1;
    private javax.swing.JButton agregarButton;
    private javax.swing.JPanel agregarPane;
    private javax.swing.JComboBox ascendenteCmb;
    private javax.swing.JMenuItem borrarMenuItem;
    private javax.swing.JComboBox cambiarIconoCmb;
    private javax.swing.JComboBox campoOrdenarCmb;
    private javax.swing.JButton cancelarAgregarButton;
    private javax.swing.JButton cancelarModificarButton;
    private javax.swing.JTextField descripcionTxt;
    private javax.swing.JMenuItem exportarMenuItem;
    private javax.swing.JButton guardarModificarButton;
    private javax.swing.JLabel iconoLabel;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JMenuBar mainMenuBar;
    private javax.swing.JMenuItem modificarMenuItem;
    private javax.swing.JPanel modificarPane;
    private javax.swing.JTextField nombreTxt;
    private javax.swing.JMenuItem nuevoMenuItem;
    private javax.swing.JTextField precioTxt;
    private javax.swing.JTable productosTable;
    private javax.swing.JMenu refreshMenu;
    private javax.swing.JPanel statusBar;
    private javax.swing.JLabel statusBarLabel;
    private javax.swing.JTextField stockTxt;
    // End of variables declaration//GEN-END:variables
    
}
